﻿// XNetSDKTest.h : 定义控制台应用程序的入口点。
//
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <map>
#include <time.h>
#include "XNetSDK.h"
#include "TestFuns.h"

using namespace std;

extern XSDK_HANDLE g_hDevice;

/*******************************************
*函数功能:
	设备系统配置
********************************************/
int TestDevSystemConfig();

/*******************************************
*函数功能:
	相机相关配置
********************************************/
int TestCameraConfig();

/*******************************************
*函数功能:
	编码格式配置
********************************************/
typedef struct SDK_VIDEO_FORMAT
{
	int		iCompression;			//  压缩模式(视频格式) 参照enum SDK_CAPTURE_COMP_t 	
	int		iResolution;			//  分辨率 参照枚举SDK_CAPTURE_SIZE_t
	int		iBitRateControl;		//  码流控制 参照枚举SDK_capture_brc_t
	int		iQuality;				//  码流的画质 档次1-6		
	int		nFPS;					//  帧率值，NTSC/PAL不区分,负数表示多秒一帧		
	int		nBitRate;				//  0-4096k,该列表主要由客户端保存，设备只接收实际的码流值而不是下标。
	int		iGOP;					//  描述两个I帧之间的间隔时间，2-12 
} SDK_VIDEO_FORMAT;
void CalculateCodeStreamValue(SDK_VIDEO_FORMAT * vfSetFormat, bool bLowBitrate, bool bFisheyeBitrate, bool bH265Bitrate);
void GetMaxResolAndRate(int &nResolu, int &nRate, long lFreePower);
void GetSupportRes(int maxSize, unsigned long dwMask );
int TestEncodeConfig();

/*******************************************
*函数功能:
	设备云台功能
********************************************/
int TestDevPTZ();

/*******************************************
*函数功能:
	接收设备返回的配置数据
*注：
	异步接口XSDK_DevGetSysConfig/XSDK_DevGetChnConfig
	返回的数据就是在函数中处理
********************************************/
void OnDevConfig(int nMsgId, int nResult, const char *szCfgName, const char *szResult, int nResultLen, int nSeq);

/*******************************************
*函数功能:
	录像查询
********************************************/
int TestDevFindFile();
void OnDevFindFile(int nResult, SXSDKQueryRecordRes *pFiles, int nCount, int nSeq);

/*******************************************
*函数功能:
	设备报警回调
********************************************/
int TestDevAlarmCallback();
void OnDevAlarmCallback(XSDK_HANDLE hDevice, const char *szAlarm);

/*******************************************
*函数功能:
	实时视频
********************************************/
int TestMediaRealPlay();

/*******************************************
*函数功能:
	录像回放
********************************************/
int TestMediaRecordPlay();

/*******************************************
*函数功能:
	人脸抓图(定制)
********************************************/
int TestMediaFaceImage();

/*******************************************
*函数功能:
	设备搜索
********************************************/
int TestDevSearch();
void OnDevSearchResult(int nResult, SXSDK_CONFIG_NET_COMMON *pDevs, int nCount);

/*******************************************
*函数功能:
	修改设备密码
********************************************/
int TestModifyPassword();

/*******************************************
*函数功能:
	恢复默认配置
********************************************/
int TestSetDefaultConfig();

/*******************************************
*函数功能:
	录像下载
********************************************/
int TestDownload();

/*******************************************
*函数功能:
	控制设备（重启和关机）
********************************************/
int TestOPMachine();

/**************DAS相关*********************/

/*******************************************
*函数功能:
	配置DAS
********************************************/
int TestDevDASConfig();
/*******************************************
*函数功能:
	开启DAS功能
********************************************/
XSDK_HANDLE g_hDasServer = 0;
void OnDASServerStart(XSDK_HANDLE hServer, int nResult);
void OnDASDeviceReg(XSDK_HANDLE hDevice, SXSDKDASDeviceInfo *pDevInfo);
int TestDASServer();

/*******************************************
*函数功能:
	设备通道抓图
********************************************/
void OnDevSnap(int nResult, const char *pData, int nDataLen, int nSeq);
int TestDevSnap();

/*******************************************
*函数功能:
	升级设备程序
********************************************/
int TestUpgrade();
void OnUpgradeCallback(EUpgradeStep nStep, int process, int nTotalSize);

/**************串口相关*********************/

/*******************************************
*函数功能:
	打开透明串口，接收返回的数据
********************************************/
int TestOpenTransChannel();
void OnTransCommCallback(XSDK_HANDLE hDevice, const char *szData);

/*******************************************
*函数功能:
	对讲
********************************************/
int TestDevTalk();

/*******************************************
*函数功能:
	日志查询
********************************************/
int TestOPLogQuery();

/*******************************************
*函数功能:
	视频叠加
********************************************/
int TestOSDInfo();

/*******************************************
*函数功能:
	图像参数配置
********************************************/
int TestVideoCfg();

/*******************************************
*函数功能:
	云台预置点及巡航
********************************************/
int TestPTZPreset();

/*******************************************
*函数功能:
	按文件名称下载
*注:
	一般用于下载存储在SD卡上的图片
********************************************/
int TestDownloadByName();

/*******************************************
*函数功能:
	获取通道状态
********************************************/
int TestGetChnStatus();

/*******************************************
*函数功能:
	查询录像日历
********************************************/
int TestSearchCalendar();

/*******************************************
*函数功能:
	FTP/NTP/UPNP相关配置
********************************************/
int TestNetSeverConfig();

/*******************************************
*函数功能:
	数模相关配置
********************************************/
int TestChnMode();

/*******************************************
*函数功能:
	数字通道管理
********************************************/
int TestNetDecorderConfig();

/*******************************************
*函数功能:
	恢复默认配置
********************************************/
int TestOPDefaultConfig();

/*******************************************
*函数功能:
	人形检测配置(需先开启移动侦测配置)
********************************************/
int TestHumanDetectConfig();

/*******************************************
*函数功能:
	通用配置
********************************************/
int TestGeneralConfig();

/*******************************************
*函数功能:
	获取GPS状态，支持GPS的设备才能获取
********************************************/
int TestGPSStatus();

/*******************************************
*函数功能:
	获取当前设备时区配置
********************************************/
int TestTimeZoneConfig();